<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="nsba3" id="nsba3"><span data-lake-id="u62fe8290" id="u62fe8290">典型回答</span></h1>
  <p data-lake-id="u262610e9" id="u262610e9"><span data-lake-id="ucb9e217d" id="ucb9e217d">使用包装类，不要使用基本类型，比如某个字段表示费率的</span><code data-lake-id="u2bab3e4c" id="u2bab3e4c"><span data-lake-id="u5c486d37" id="u5c486d37">Float rate</span></code><span data-lake-id="ue1e6a978" id="ue1e6a978">,在接口中返回时，如果出现接口异常的情况，那么可能会返回默认值，float的话返回的是0.0，而Float返回的是null。</span></p>
  <p data-lake-id="u6613e40b" id="u6613e40b"><span data-lake-id="uf413e31d" id="uf413e31d">​</span><br></p>
  <p data-lake-id="u6bdbc5cb" id="u6bdbc5cb"><span data-lake-id="u814a5320" id="u814a5320">在接口中，为了避免发生歧义，建议使用对象，因为他默认值是null，当看到null的时候，我们明确的知道他是出错了，但是看到0.0的时候，你不知道是因为出错返回的0.0，还是就是不出错真的返回了0.0，虽然可以用其他的字段如错误码或者getSuccess判断，但是还是尽量减少歧义的可能</span></p>
  <h1 data-lake-id="wvPbt" id="wvPbt"><span data-lake-id="u45600e48" id="u45600e48">知识扩展</span></h1>
  <h2 data-lake-id="JD3iV" id="JD3iV"><span data-lake-id="u7efa9153" id="u7efa9153" style="color: rgb(38, 38, 38)">在接口定义的时候，如何定义一个字段表示是否成功？</span></h2>
  <p data-lake-id="u30bbd0d8" id="u30bbd0d8"><span data-lake-id="u780fcb3b" id="u780fcb3b">以下四种：</span></p>
  <pre lang="java"><code>
boolean success
Boolean success
boolean isSuccess
Boolean isSuccess
</code></pre>
  <p data-lake-id="u171de5d1" id="u171de5d1"><span data-lake-id="u0b1f8193" id="u0b1f8193">建议使用过第2种：</span></p>
  <p data-lake-id="ub64eba3c" id="ub64eba3c"><span data-lake-id="ubc40f472" id="ubc40f472">​</span><br></p>
  <p data-lake-id="u09a76b68" id="u09a76b68"><span data-lake-id="ufdc21aee" id="ufdc21aee">首先，作为接口的返回对象的参数，这个字段不应该有不确定的值，而Boolean类型的默认值是null，而boolean的默认值是false，所以，当拿到一个false的时候，你就不知道是真的false了，还是因为出了问题而默认返回的false。</span></p>
  <p data-lake-id="ua9a837a8" id="ua9a837a8"><span data-lake-id="u68c04c91" id="u68c04c91">​</span><br></p>
  <p data-lake-id="u4e616cd9" id="u4e616cd9"><span data-lake-id="u8ffe691b" id="u8ffe691b">其他，关于参数名称，要使用success还是isSuccess，这一点在阿里巴巴Java开发手册中有明确规定和解释：</span></p>
  <p data-lake-id="u89208cfc" id="u89208cfc"><span data-lake-id="u116e6489" id="u116e6489">​</span><br></p>
  <p data-lake-id="ua9968536" id="ua9968536"><u><span data-lake-id="uac506bb7" id="uac506bb7">【强制】 POJO 类中的任何布尔类型的变量，都不要加 is，否则部分框架解析会引起序列化错误。</span></u></p>
  <p data-lake-id="u51912acc" id="u51912acc"><u><span data-lake-id="u62ebef37" id="u62ebef37">反例： 定义为基本数据类型 boolean isSuccess；的属性，它的方法也是 isSuccess()， RPC</span></u></p>
  <p data-lake-id="u6dfc303f" id="u6dfc303f"><u><span data-lake-id="u71c2ef31" id="u71c2ef31">框架在反向解析的时候， “ 以为” 对应的属性名称是 success，导致属性获取不到，进而抛出</span></u></p>
  <p data-lake-id="uf7a40a18" id="uf7a40a18"><u><span data-lake-id="u0bb35638" id="u0bb35638">异常。</span></u></p>
 </body>
</html>